import { defineConfig, loadEnv } from "vite";
import path from "path";
import createVitePlugins from "./vite/plugins";


// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
  const env = loadEnv(mode, process.cwd());
  const { VITE_APP_ENV, VITE_APP_BASE } = env;
  
  // 动态确定 base 路径
  let base = "/"
  
  // 根据环境变量或构建模式确定 base
  if (VITE_APP_BASE) {
    // 如果设置了环境变量，使用环境变量
    base = VITE_APP_BASE
  } else if (mode === 'production') {
    // 生产环境，根据部署场景确定
    // 如果是独立部署，使用 "/"
    // 如果是作为微应用部署，可能需要使用 "/tds-ec-web/"
    base = "/"
  } else {
    // 开发环境，使用 "/"
    base = "/"
  }
  
  console.log(`[Vite Config] 当前模式: ${mode}, base: ${base}`)
  
  return {
    // 基础路径配置
    // 开发环境: "/" (独立运行)
    // 生产环境: 根据部署场景确定
    base: base,
    
    plugins: [
      createVitePlugins(env, command === "build")
    ],
    
    resolve: {
      alias: {
        // 设置别名
        "@": path.resolve(__dirname, "./src"),
        '@utils': path.resolve(__dirname, '../../packages/utils')
      },
      extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
    },
    
    // 开发服务器配置
    server: {
      port: 9092,
      host: true,
      open: false,
      cors: true,
      headers: {
        'Access-Control-Allow-Origin': '*',
      },
      proxy: {
        "/tds-ec-api": {
          target: 'http://192.168.106.13:8090',//开发环境
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/tds-ec-api/, ""),
        }
      },
    },
    
    // CSS配置
    css: {
      postcss: {
        plugins: [
          {
            postcssPlugin: "internal:charset-removal",
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === "charset") {
                  atRule.remove();
                }
              },
            },
          },
        ],
      },
    },
    
    // 构建配置
    build: {
      target: 'es2015',
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: false,
      minify: 'terser',
      rollupOptions: {
        output: {
          // 自定义输出文件名格式
          entryFileNames: `assets/[name]-[hash]-${new Date().getTime()}.js`,
          chunkFileNames: `assets/[name]-[hash]-${new Date().getTime()}.js`,
          assetFileNames: `assets/[name]-[hash]-${new Date().getTime()}.[ext]`,
          // 确保外部化处理那些你不想打包进库的依赖
          manualChunks: {
            'vue': ['vue'],
            'ant-design-vue': ['ant-design-vue'],
            'vue-router': ['vue-router'],
            'pinia': ['pinia'],
          }
        },
        // 确保外部化处理那些你不想打包进库的依赖
        external: [],
      },
      // 关闭CSS代码分割
      cssCodeSplit: false,
    },
    
    // qiankun 微应用配置
    define: {
      __VUE_OPTIONS_API__: true,
      __VUE_PROD_DEVTOOLS__: false,
    },
    
    // 预览配置
    preview: {
      port: 9092,
      host: true,
      cors: true,
      headers: {
        'Access-Control-Allow-Origin': '*',
      },
    },
    
    // 优化配置
    optimizeDeps: {
      include: ['vue', 'ant-design-vue', 'vue-router', 'pinia'],
    },
  };
});
